package main

import (
	"GormData/models/relation_table"
	_ "github.com/go-sql-driver/mysql" // 导入 MySQL 驱动
	"github.com/jinzhu/gorm"
)

// 一对一操作
func main() {
	// 用户名：密码@tcp(ip:port)/数据库?charset=utf8&parseTime=True&loc=Local
	db, err := gorm.Open("mysql", "root:123456@tcp(localhost:3306)/gorm_project?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}

	defer db.Close() // 关闭空闲的连接

	// 增加
	//user_profile := relation_table.UserProfile{
	//	Pic:   "95.jpg",
	//	CPic:  "53.jpg",
	//	Phone: "17152145631",
	//	User: relation_table.User{
	//		Name: "alex",
	//		Age:  32,
	//		Addr: "广州",
	//	},
	//}
	//
	//db.Create(&user_profile)

	// 查询
	// 查询方式1： Association
	//var u_profile relation_table.UserProfile
	//db.First(&u_profile, 1)
	//fmt.Println(u_profile) // {1 1.jpg 2.jpg 15463201578 {0  0  0}}
	//// 先查询出来，在根据Association属性值关联查询，Association的值为关联表的模型名称
	//db.Model(&u_profile).Association("User").Find(&u_profile.User)
	//fmt.Println(u_profile) // {1 1.jpg 2.jpg 15463201578 {1 Jackson 34 北京 1}}

	// 查询
	// 查询方式2： Preload       经常使用这个
	//var u_profile2 relation_table.UserProfile
	////db.Debug().Preload("User").First(&u_profile2, 2)
	//db.Preload("User").First(&u_profile2, 2)
	//fmt.Println(u_profile2) // {2 13.jpg 24.jpg 16594431503 {2 Jack 434 上海 2}}

	// 查询
	// 查询方式3： Related      这里边的结果是分开在2个模型里
	//var user_profile3 relation_table.UserProfile
	//db.First(&user_profile3, 3)
	//fmt.Println(user_profile3)
	//
	//var user relation_table.User
	//db.Model(&user_profile3).Related(&user, "User")
	//fmt.Println(user)
	//fmt.Println(user_profile3)

	// 更新:   一定要加条件！
	// 先关联查询出来，在更新关联表中的字段
	//var update_profile relation_table.UserProfile
	//
	//db.Debug().Preload("User").First(&update_profile, 1)
	//fmt.Println(update_profile)
	////db.Model(&update_profile.User).Update(relation_table.User{Name: "Jackson", Age: 42, Addr: "北京朝阳"})
	//db.Model(&update_profile.User).Update("name", "Jackson")
	////db.Model(&update_profile.User).Update("age", 30)
	////db.Model(&update_profile.User).Update("addr", "北京")
	////db.Model(&update_profile.User).Where("id=1", update_profile.User.Name).Update("name", "qiaofu")
	////db.Model(&update_profile.User).Updates(relation_table.User{Name: "alex", Age:  53, Addr: "厦门",})
	//fmt.Println(update_profile)

	//删除:
	var del_profile relation_table.UserProfile
	db.Preload("User").First(&del_profile, 8)
	db.Delete(&del_profile.User)

}
